#include "MEM_Operation.h"

//************************************
// Method:    	MemCpy_ReadPak		拷贝“源指针”中的数据到“目标内存”中，同时改变“源指针”指针的指向
// Programmer:  lww
// Time:		2019/2/16
// Returns:   	int					拷贝的数据的长度
// Parameter: 	char * * Src		源指针的指针
// Parameter: 	void * Dst			目标指针
// Parameter: 	int len				数据长度
//************************************
int MemCpy_ReadPak(char** Src, void* Dst, int len)
{
	memcpy(Dst, Src[0], len);
	Src[0] += len;
	return len;
}

//************************************
// Method:    	MemCpy_ReadPak_TipBigTrans	拷贝“源指针”中的数据到“目标内存”中，同时改变“源指针”指针的指向（涉及大小端转换即反向）
// Programmer:  lww
// Time:		2019/2/16
// Returns:   	int							拷贝的数据的长度
// Parameter: 	char * * Src				源指针的指针
// Parameter: 	void * Dst					目标指针
// Parameter: 	int len						数据长度
//************************************
int MemCpy_ReadPak_TipBigTrans(char** Src, void* Dst, int len)
{
	char* _pSrc = Src[0];
	char* _pDst = (char*)Dst;
	for (int i = 0; i < len; i++)
	{
		_pDst[i] = _pSrc[len - i];
	}
	Src[0] += len;
	return len;
}

//************************************
// Method:    	MemCpy_WritePak		拷贝“源指针”中的数据到“目标内存”中，同时改变“目标内存”指针的指向
// Programmer:  lww
// Time:		2018/11/15
// Returns:   	int					拷贝的数据的长度
// Parameter: 	char * * Dst		目标指针的指针
// Parameter: 	void * Src			源指针
// Parameter: 	int len				数据长度
//************************************
int MemCpy_WritePak(char** Dst, void* Src, int len)
{
	memcpy(Dst[0], Src, len);
	Dst[0] += len;
	return len;
}

//************************************
// Method:    	MemCpy_WritePak_TipBigTrans	拷贝“源指针”中的数据到“目标内存”中，同时改变“目标内存”指针的指向（涉及大小端转换）
// Programmer:  lww
// Time:		2019/2/16
// Returns:   	int							拷贝的数据的长度
// Parameter: 	char * * Dst				目标指针的指针
// Parameter: 	void * Src					源指针
// Parameter: 	int len						数据长度
//************************************
int MemCpy_WritePak_TipBigTrans(char** Dst, void* Src, int len)
{
	char* _pSrc = (char *)Src;
	char* _pDst = Dst[0];
	for (int i = 0; i < len; i++)
	{
		_pDst[i] = _pSrc[len - i];
	}
	Dst[0] += len;
	return len;
}